import axios from 'axios';
import {
  store
} from '@/store';
import {
  router
} from '@/router';

import {
  message
} from 'ant-design-vue';
const env =
  import.meta.env;
const service = axios.create({
  //默认请求路径
  baseURL: env.VITE_ENV == 'dev' ? null : env.VITE_BASE_URL,
  //请求多久延时
  timeout: 30000,
  // 延时后重新请求次数
  retry: 3,
  //延时后重新请求间隔
  retryInterval: 1000,
  // 设置请求头
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截---请求前
service.interceptors.request.use(
  config => {
    let query_data = config.params || config.data;
    if (query_data['path']) {
      Object.keys(query_data.path).forEach(val => {
        config["url"] += `/${query_data.path[val]}`
      })
      delete query_data.path;
    }

    //请求自动带上s_id,如果不需要的话加 user_pass
    var token = store.state.userInfo.token;
    if (token || query_data.user_pass) {
      if (query_data.user_pass) {
        delete query_data['user_pass'];
      } else if (token) {
        //图片上传body中不需要带sessionid
        config.headers.Authorization = token;
      }
    } else {
      message.warning('登录后才能查看');
    }
    // console.log(config)
    return config;
  },
  error => {
    console.log('发起请求错误', error)
  }
)

// 请求拦截---请求后
service.interceptors.response.use(
  ({
    data
  }) => {
    //请求成功的code
    const succeedCode = [200];
    //成功且需要提示的code
    const msgCode = [200];
    // 根据后台的code判断请求状态
    if (data.error) {
      if (data.code === 401) {
        router.push({
          name: 'login'
        })
      }
      message.warning(data.message || '操作失败');
      //上线后这个可以不需要
      return Promise.reject(data.message);
    } else {
      if (msgCode.includes(data.code)) {
        message.success(data.message || '操作成功');
      }
      return data;
    }
  },
  error => {
    let response = error.response || {
      data: {}
    };
    message.error(response.data.message || '操作失败');
    return Promise.reject(error);
  }
)

export default service;